package com.zhouhailin;

import java.util.Optional;

/**
 * @Author zhouhailin
 * @date 2023/1/17 17:01
 */
public class CreateOptionalDemo {
    public static void main(String[] args) {
        // 1、使用静态方法 empty() 创建一个空的 Optional对象
        Optional<String> empty = Optional.empty();
        System.out.println(empty);

        // 2、使用静态方法 of() 创建一个非空的 Optional对象
        Optional<String> opt = Optional.of("zhouhailin");
        System.out.println(opt);

        // 3、使用静态方法 ofNullable() 创建一个即可空又可非空的Optional对象
        String name = null;
        Optional<String> optionalOrNull = Optional.ofNullable(name);
        System.out.println(optionalOrNull);

        // 4、使用方法isPresent()，判断一个Optional对象是否存在
        Optional<String> opt123 = Optional.of("hailin");
        System.out.println(opt123.isPresent());

        Optional<String> optionalNull = Optional.ofNullable(null);
        System.out.println(optionalNull.isPresent());

        // 5、非空表达式Present
        Optional<String> optOrNull = Optional.ofNullable(null);
        System.out.println("123");
        if (optOrNull.isPresent()) {
            System.out.println("输出：" + optOrNull.get().length());
        }

        // 采用 ifPresent()方法
        Optional<String> optionalS = Optional.of("大海");
        optionalS.ifPresent(str -> System.out.println("===" + str.length()));

        // 6、设置（获取）默认值
        /**
         * orElse() 方法用于返回包裹在Optional对象中的值，如果值不为 null，则返回；
         *                                            否则返回默认值
         * 方法的参数类型和值的类型一致
         */
        String nullName = null;
//        String nullName = "qq";
        // 只有nullName是 null 时，才会执行下面代码，输出结果是：zhouhailin,
        //             是 “qq”时，输出结果是：qq
        String myName = Optional.ofNullable(nullName).orElse("zhouhailin");
        System.out.println(myName);

        /**
         * orElseGet() 方法
         */
        String myName123 = Optional.ofNullable(nullName).orElseGet(() -> "zhou");
        System.out.println(myName123);

    }

}
